/*
 * ArchivoDeBloques.h
 *
 *  Created on: 26/10/2014
 *      Author: esantamarta
 */

#ifndef ARCHIVODEBLOQUES_H_
#define ARCHIVODEBLOQUES_H_


#include <iostream>
#include <fstream>
#include "Bloque.h"
#include "Registro.h"
using namespace std;

class ArchivoDeBloques {
public:

	/*El archivo fisico ya debe existir y crea la instancia consultando la metadata*/
	ArchivoDeBloques (string nombreArch);

	/*Crea el archivo fisico y la instancia guardando el tamaño en la metadata*/
	ArchivoDeBloques (string nombreArch, unsigned int tamBloque);

	//Se crea el archivo
	//Se incializa el archivo segun la cantidad y tamaño de bloques.
	//Cada byte es un /00 en el arch   .
	ArchivoDeBloques(string nombreArch, unsigned int cantBloques, unsigned int tamBloque );

	//Agrega una determinada cantidad de bloques VACIOS al final del archivo
	//Cada byte es un /00 en el arch.
	int agregarBloquesVacios(unsigned int cantBloques);

	/*Escribe el bloque sobre el bloque ingresado por parametro*/
	int escribirBloque (Bloque bloque, unsigned int numeroBloque);

	/*Agrega el bloque indicado al final*/
	int escribirBloque (Bloque bloque);

	/*Agrega el registro en el bloque indicado*/
	int escribirRegistro(Registro registro, unsigned int numeroBloque);

	/*Obtiene el bloque*/
	Bloque* leerBloque(unsigned int numeroBloque);

	/*Obtiene el registro TODO*/
	Registro* leerRegistro(unsigned int numeroBloque, unsigned int numeroRegistro);

	virtual ~ArchivoDeBloques();

	unsigned int tamBloque;
	unsigned int cantBloques;
	string nombreArch;

private:
	unsigned int actualizarCantBloques(unsigned int cantidad);
};

#endif /* ARCHIVODEBLOQUES_H_ */
